package interview.huawei.tjt.training.str;

import java.util.Scanner;

/**
 * 实现 strStr() 函数。
 *
 * 给定一个 haystack 字符串和一个 needle 字符串，在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在，则返回  -1。
 *
 * 示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2
 *
 * 示例 2: 输入: haystack = "aaaaa", needle = "bba" 输出: -1
 *
 * 说明: 当 needle 是空字符串时，我们应当返回什么值呢？这是一个在面试中很好的问题。 对于本题而言，当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
 */
// 双指针法（滑动窗口法）
public class StrStr {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String haystack = sc.nextLine();
            String needle = sc.nextLine();
            int result = -1;
            if (needle.equals("")) {
                result = 0;
            } else {
                int pn = 0; // 指向needle的指针
                int ph = 0; // 指向haystack的指针
                // 当 haystack 剩余的字符的数量小于 needle 的长度时退出循环
                while ( ph < haystack.length() - needle.length() + 1 ) {
                    // 当 ph 的值小于 haystack 的长度 且 ph指向的haystack的值不等于needle的首字母时，ph向后移动
                    while ( ph < haystack.length() && haystack.charAt(ph) != needle.charAt(pn))
                        ph ++;
                    // 没有首字母相等
                    if ( ph == haystack.length() ) {
                        result = -1;
                    }
                    // 首字母相等时遍历后续字符
                    ph ++;
                    pn ++;
                    while ( ph < haystack.length() && pn < needle.length() && haystack.charAt(ph) == needle.charAt(pn)) {
                        ph ++;
                        pn ++;
                    }
                    // 找到时
                    if (pn == needle.length()) {
                        result = ph - pn;
                    } else {    // 没有找到时指针ph回退，pn指针指向0
                        ph -= pn - 1;
                        pn = 0;
                    }
                }
            }
            System.out.println(result);
        }
    }

}
